#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
练习题 01: 变量交换
难度: ⭐
知识点: 变量赋值、Python特性
参考文件: comparison_examples/basics/01_variables_and_data_types.py
"""

def problem_description():
    """
    题目描述:
    给定两个变量 a 和 b，请用至少3种不同的方法交换它们的值。
    
    要求:
    1. 方法1: 使用临时变量
    2. 方法2: 使用Python的多重赋值特性
    3. 方法3: 使用算术运算（仅适用于数字）
    4. 方法4: 使用异或运算（仅适用于整数）
    
    示例:
    输入: a = 10, b = 20
    输出: a = 20, b = 10
    """
    pass

# TODO: 实现以下函数

def swap_with_temp(a, b):
    """
    方法1: 使用临时变量交换两个值
    
    Args:
        a: 第一个值
        b: 第二个值
    
    Returns:
        tuple: (交换后的a, 交换后的b)
    
    示例:
        >>> swap_with_temp(10, 20)
        (20, 10)
    """
    # 在这里实现你的代码
    pass

def swap_with_multiple_assignment(a, b):
    """
    方法2: 使用Python的多重赋值特性交换两个值
    
    Args:
        a: 第一个值
        b: 第二个值
    
    Returns:
        tuple: (交换后的a, 交换后的b)
    
    示例:
        >>> swap_with_multiple_assignment(10, 20)
        (20, 10)
    """
    # 在这里实现你的代码
    pass

def swap_with_arithmetic(a, b):
    """
    方法3: 使用算术运算交换两个数值
    注意: 仅适用于数字类型
    
    Args:
        a: 第一个数值
        b: 第二个数值
    
    Returns:
        tuple: (交换后的a, 交换后的b)
    
    示例:
        >>> swap_with_arithmetic(10, 20)
        (20, 10)
    """
    # 在这里实现你的代码
    pass

def swap_with_xor(a, b):
    """
    方法4: 使用异或运算交换两个整数
    注意: 仅适用于整数类型
    
    Args:
        a: 第一个整数
        b: 第二个整数
    
    Returns:
        tuple: (交换后的a, 交换后的b)
    
    示例:
        >>> swap_with_xor(10, 20)
        (20, 10)
    """
    # 在这里实现你的代码
    pass

def demonstrate_all_methods():
    """
    演示所有交换方法
    """
    print("=== 变量交换演示 ===")
    
    # 测试数据
    test_cases = [
        (10, 20),
        ("hello", "world"),
        ([1, 2, 3], [4, 5, 6]),
        (3.14, 2.71)
    ]
    
    for i, (a, b) in enumerate(test_cases, 1):
        print(f"\n测试用例 {i}: a = {a}, b = {b}")
        
        # 方法1: 临时变量
        result1 = swap_with_temp(a, b)
        print(f"方法1 (临时变量): {result1}")
        
        # 方法2: 多重赋值
        result2 = swap_with_multiple_assignment(a, b)
        print(f"方法2 (多重赋值): {result2}")
        
        # 方法3和4仅适用于数字
        if isinstance(a, (int, float)) and isinstance(b, (int, float)):
            result3 = swap_with_arithmetic(a, b)
            print(f"方法3 (算术运算): {result3}")
            
            if isinstance(a, int) and isinstance(b, int):
                result4 = swap_with_xor(a, b)
                print(f"方法4 (异或运算): {result4}")

if __name__ == "__main__":
    # 运行演示
    demonstrate_all_methods()
    
    # 简单测试
    print("\n=== 简单测试 ===")
    a, b = 100, 200
    print(f"原始值: a = {a}, b = {b}")
    
    # 测试多重赋值方法
    a, b = b, a
    print(f"交换后: a = {a}, b = {b}")
